

import java.util.ArrayList;

/**
 *
 * @author David Coronado
 */
public class ArrayStack<E> implements Stack<E> {

    ArrayList<E> stack;
    Object temp;

    public ArrayStack() {
        stack = new ArrayList();
    }

    /**
     * Metodo para "des estacionar" un automovil
     * @param index : lugar donde se encuentra el carro
     * @return temp : el objeto automovil
     */
    public E pop() throws EmptyStackException, NoSuchParkingSpotException {
        if (stack.isEmpty()) {
            throw new EmptyStackException("El parqueo esta vacio...");
        }
        return (E) stack.get(stack.size()-1);
    }

    /**
     * Metodo para estacionar un automovil
     * Ingresa un objeto al stack del parqueo
     * @param carro
     * @throws program.FullStackException
     */
    public void push(E carro) throws FullStackException{
        if (stack.size() == 10) {
            throw new FullStackException("El parqueo esta lleno, no se pueden ingresar mas carros...");
        } else {
            stack.add(carro);
        }
    }

    /**
     * Metodo para verificar el automovil parqueado en alguna casilla
     * Nos muestra el elemento en el lugar indicado
     * @param index
     * @return automovil
     * @throws program.EmptyStackException
     * @throws program.NoSuchParkingSpotException
     */
    public E peek() throws EmptyStackException, NoSuchParkingSpotException {
        return (E) stack.get(0);
    }

    /**
     * Metodo para saber si el estacionamiento (stack) esta lleno
     * @return isFull??
     */
    public boolean isFull() {
        if (stack.size() == 10) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 
     * @return una representacion del stack o estacionamiento
     */
    @Override
    public String toString() {
        String lot = "";
        int cont=0;
        try {
            for (int i = 0; i < 10; i++) {
                System.out.println("Parqueo " + (i+1) + ": " + stack.get(i).toString());
                cont++;
            }
        } catch (Exception e) {
            for(int k=cont+1 ; k<=10 ; k++){
                System.out.println("Parqueo " + k + ": vacio");
            }
        }
        return lot;
    }

    public boolean isEmpty() {
        return stack.isEmpty();
    }
    }

